云原生是當今技術中最流行的術語之一,而且它只會越來越流行。事實上,根據谷歌趨勢,“云原生”一詞在 2019 年 10 月剛剛達到最高關注度。部分流行可以歸因于營銷熱議,但云原生令人興奮的是草根支持。如此多的開發人員和組織正在接受云原生的承諾并幫助開發生態系統。因此,今天有各種各樣的工具構成了云原生景觀。在他們的交互式地圖中,云原生計算基金會 (CNCF) 將這些工具分為幾類。
在這里,我們將仔細研究其中一個類別:云原生應用程序定義和映像構建。這些工具提供“黃金圖像”和權威的應用程序定義,以簡化定義和擴展云原生應用程序的過程。為了滿足云原生空間的需求,這些工具需要輕量級、可擴展且敏捷。到本文結束時,您將了解什么是云原生應用程序定義和映像構建、它們的優勢以及該類別中一些最流行工具的詳細信息。
什么是云原生應用定義和鏡像構建?
云原生應用定義和鏡像構建是自動化應用交付的重要部分。圖像和應用程序定義為您提供了部署和擴展云原生微服務的來源。鏡像是為容器和虛擬設備部署提供權威來源的二進制文件。應用程序定義定義了應用程序所需的所有資源。因此,開發人員可以從以編程方式進行的可重復部署中獲益。這些圖像和應用程序定義的描述可能有點抽象,所以讓我們分別仔細看看。
應用程序定義速成班
正如 Puppet 在其文檔中所描述的那樣,應用程序定義有兩部分:應用程序組件和服務資源。應用程序組件是在您的云原生應用程序中啟用特定功能的代碼塊。如果您正在創建 LAMP/LEMP 堆棧,您可以為數據庫、Web 服務器、CMS(內容管理系統)和負載平衡器創建離散組件。
另一方面,服務資源抽象出模塊依賴性并支持應用程序內節點之間的數據傳輸。例如,如果您創建云原生 LAMP/LEMP 應用程序,服務資源使您的數據庫和應用程序能夠進行通信。應用程序定義是一種以編程方式定義這兩個部分之間的數據流和依賴關系的方法。因此,它們允許您抽象出復雜性并輕松擴展配置。
了解機器映像和容器映像
CNCF 的 Cloud Native Landscape 包括用于構建機器映像和容器映像的工具。如果您曾經使用過虛擬設備,您應該熟悉機器映像的概念。與應用程序定義一樣,機器映像支持部署預配置資源。但是,他們這樣做的方式不同。機器映像將操作系統、程序包和服務捆綁在一起作為一個映像。OVA、Amazon 機器映像和 VMDK 是您可能熟悉的機器映像的常見示例。容器鏡像類似,但不需要操作系統。打個比方:容器鏡像之于容器,就像 OVA 之于虛擬設備。例如,當您使用 docker run 命令時,您是從運行在底層操作系統內核之上的 Docker 映像創建一個容器。
云原生應用定義和鏡像構建的好處
您現在應該了解什么是云原生應用程序定義和映像構建。現在,讓我們探討一下為什么它是 Cloud Native Landscape 的重要組成部分。在本節中,我們將探討云原生應用程序定義和映像構建工具的優勢。
可擴展的部署
使用云原生應用程序,您需要快速啟動微服務。您還必須能夠迭代和重復地執行此操作。一般來說,微服務可以幫助您實現這些目標。但是,您需要明確定義的權威參考,以可靠的方式以編程方式部署微服務。云原生應用程序定義和鏡像構建工具可幫助您解決該問題。使用正確的工具,您可以定義多容器應用程序并大規模部署它。
改進的 CI/CD
快速實例化圖像的能力大大改進了測試和開發工作流程。應用程序定義和映像構建類別中的工具有助于確保向測試人員和其他開發人員部署相同的應用程序。因此,整體 CI/CD 管道得到改善。例如,您可以顯著減少創建隔離開發環境所需的時間。同樣,像 Docker Compose 這樣的工具可以幫助您快速啟動圖像、測試它并在需要時終止它。
松耦合
松散耦合是使微服務具有彈性和可擴展性的重要組成部分。云原生應用程序定義有助于松耦合離散服務。假設您使用 MySQL 作為應用程序的數據庫組件。假設您的 CMS 和數據庫使用“Sql”服務資源進行通信。現在,假設您的團隊決定從 MySQL 切換到 Postgres 數據庫。由于服務資源提供的抽象,您可以這樣做而不必擔心對 CMS 組件的修改。
降低復雜性
云原生應用程序定義和圖像構建工具為您的圖像和應用程序定義創建“單一真實來源”。因此,您可以消除與大規模管理微服務相關的大部分復雜性。版本控制、更新和回滾變得更易于管理。
部署到多個環境
為云原生構建的圖像通常可以在多個公共和私有云平臺以及裸機上實例化。這種獨立于平臺的映像構建方法提高了靈活性并減少了供應商鎖定。它還允許您快速為客戶創建演示,并在您最初沒有考慮的環境中使用您的圖像。
流行的云原生應用定義和鏡像構建服務
我們無法推薦一種放之四海而皆準的云原生應用程序定義和映像構建工具。您需要了解您的環境需求并為工作選擇合適的工具。CNCF的交互式云原生景觀頁面是您研究的一個很好的起點。但是,要整理的內容可能很多。為了幫助您進行搜索,我們仔細研究了列表中一些最受歡迎的項目。
舵
Helm已經成為云原生界的熱門項目。它得到了開發者社區的支持,包括來自 Microsoft、Google 和 Samsung SDS 等公司的開發者。此外,Helm 由 CNCF 自己維護。Helm 可幫助您簡化定義、安裝和升級 Kubernetes 的過程。Charts是精選的應用程序定義,是使 Helm 如此強大的重要組成部分。Charts 允許您對復雜的云原生應用程序擁有單一的授權點。他們還提供大規模可重復的應用程序安裝。如果您想深入了解圖表主題,請查看Helm 文檔中的此頁面。
碼頭工人組成
Docker Compose是云原生應用程序定義和鏡像構建類別中最受歡迎的工具之一。借助 Compose,您可以使用 YAML 文件配置多容器應用程序。然后,您只需執行 docker-compose up 命令即可啟動并運行您的應用程序。傳統上,Compose 在測試自動化和開發環境中很有用。但是,它的功能集正在發展,以至于單主機部署已成為其常見用例列表的一部分。
人居經理
Chef Habitat是一個獨立于平臺的應用程序生命周期管理工具,構建時考慮到了云原生。借助 Habitat,您的應用程序以一種允許您輕松部署、更新和擴展它們的方式進行編碼。
Habitat 將應用程序及其依賴項捆綁到輕量級和便攜式單元中。從那里,您可以跨各種平臺部署這些單元,從容器到裸機服務器。如果您正在尋找一種云原生應用程序定義和映像構建工具來簡化遺留應用程序向云的遷移,Habitat 是一個不錯的選擇。
封隔器
Packer是云原生鏡像構建領域中最令人興奮的工具之一。Packer 使用單一基本配置自動執行創建相同機器映像的過程。然后,您可以將這些機器映像部署到多個平臺。因此,持續交付、維護一致的開發/QA/staging/prod 環境以及創建虛擬設備是Packer 的示例用例。
當然,這些聽起來都不太具有開創性。虛擬設備已經存在了一段時間。是什么讓 Packer 與眾不同?速度和便攜性。當然,您可以使用 OVA 創建虛擬設備。但是,使用 Packer,過去需要數小時的配置過程可以減少到幾秒鐘。同樣,傳統虛擬設備的可移植性有限。使用 Packer,您可以在從 VirtualBox 到 AWS 再到 OpenStack 的任何地方進行部署。
腳手架
Skaffold是來自 Google 的開源 CLI 工具。前提很簡單:您處理代碼,Skaffold 會自動執行構建、推送和部署過程。Skaffold 監控您的源代碼并在發生更改時啟動工作流。當然,您定義什么是“可同步的”以及它的部署位置。該項目仍處于測試階段,但前景廣闊。Skaffold 可以讓您更多地關注開發,而不是構建和部署過程。
最后的想法
我們希望您喜歡我們深入探討 CNCF 的云原生景觀的云原生應用程序定義和圖像構建類別。該類別涵蓋范圍廣泛的工具和功能,但您不需要列出的所有工具。重要的部分是了解哪些工具和實踐對您的用例有益。